/*
 * PagEventosCategoria.java
 * 
 * Projeto: Kruskal - SRAC
 * LEDS - Laboratório de Engenharia e Desenvolvimento de Software
 * IFES - Instituto Federal do Espírito Santo - Campus Serra.
 */
package srac.controleatividades.cih;

import java.util.List;
import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.Executions;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zk.ui.event.EventListener;
import org.zkoss.zk.ui.util.GenericForwardComposer;
import org.zkoss.zul.Messagebox.ClickEvent;
import org.zkoss.zul.*;
import srac.controleatividades.cci.CtrlInterno;
import srac.controleatividades.cdp.Categoria;

public class PagEventosCategoria extends GenericForwardComposer {

    private CtrlInterno ctrl = CtrlInterno.getInstance();
    private Window winEventosCategoria;
    private Listbox listCategorias;
    private Div boxInformacao;
    private Label msg;

    @Override
    public void doAfterCompose(Component comp) throws Exception {
        super.doAfterCompose(comp);
        ctrl.setPagEventosCategoria(this);

        while (listCategorias.getItemCount() > 0) {
            listCategorias.removeItemAt(0);
        }
        List<Categoria> categorias = ctrl.obterCategorias(); //Obtem as categorias existentes

        if (categorias != null) { //Se houver alguma categoria
            for (int i = 0; i < categorias.size(); i++) {
                Categoria c = categorias.get(i);
                Listitem linha = new Listitem(categorias.get(i).toString(), c);

                linha.appendChild(new Listcell(categorias.get(i).getNome().toString()));

                linha.setParent(listCategorias);
            }
        }

    }

    public void onCreate$winEventosCategoria(Event event) {
        //if feito para verificar se existe algum usuario logado, se nao existir eh redirecionado para o login
        if (Executions.getCurrent().getSession().getAttribute("usuario") == null) {
            Executions.sendRedirect("/");
            winEventosCategoria.detach();
        }
    }

    public void addCategoria(Categoria c) {
        Listitem linha = new Listitem(c.getNome(), c);
        linha.appendChild(new Listcell(c.getNome().toString()));
        linha.setParent(listCategorias);
    }

    public void refreshCategoria(Categoria c) {
        for (int i = 0; i < listCategorias.getItemCount(); i++) {
            if (listCategorias.getItemAtIndex(i).getValue() == c) {
                listCategorias.getItemAtIndex(i).getChildren().clear();
                listCategorias.getItemAtIndex(i).appendChild(new Listcell(c.getNome()));
                break;
            }
        }
    }

    public void onClick$excluirCategoria(Event event) { //Exclui uma categoria
        Listitem listitem = listCategorias.getSelectedItem(); //Pega a categoria selecionada
        if (listitem != null) {
             eventoExcluir();
        } 
        else {
            setMensagemAviso("info", "Selecione uma categoria!");
        }
    }
    
    public void eventoExcluir() //Método feito para a mensagem de confirmação de exclusão
    {
        Messagebox.Button b1 = Messagebox.Button.YES;       
        Messagebox.Button b2 = Messagebox.Button.NO;
        Messagebox.Button [] b = new Messagebox.Button[2];
        b[0] = b1;
        b[1] = b2;

        EventListener <ClickEvent> e = new EventListener() {
            public void onEvent(Event evt) throws InterruptedException {
                if (evt.getName().equals("onYes")) {
                    Listitem listitem = listCategorias.getSelectedItem();
                    Categoria c = listitem.getValue(); 
                    if (ctrl.apagarCategoria(c)) { //Verifica se é possível apagar a categoria, se for ela é apagada
                        listCategorias.removeItemAt(listCategorias.getSelectedIndex());
                        setMensagemAviso("success", "Categoria excluída com sucesso!");
                    } 
                    else {
                        setMensagemAviso("error", "Não foi possível excluir a Categoria, já possui vinculos!");
                    }
                }
            }
        };
        Messagebox.show("Deseja excluir a categoria?","Confirmação",b,Messagebox.QUESTION , e); //Mensagem de confirmação de exlusão
        
       
    }

    public void onClick$incluirCategoria(Event event) { //Inclui uma nova categoria
        ctrl.abrirIncluirCategoria();
    }

    public void onClick$alterarCategoria(Event event) { //Altera uma categoria
        Listitem listitem = listCategorias.getSelectedItem(); //Pega a categoria selecionada
        if (listitem != null) {
            Categoria c = listitem.getValue();
            ctrl.abrirEditarCategoria(c);
        }
        else {
            setMensagemAviso("info", "Selecione uma categoria!");
        }
    }

    public void onClick$consultarCategoria(Event event) {
        Listitem listitem = listCategorias.getSelectedItem(); //Pega a categoria selecionada
        if (listitem != null) {
            Categoria c = listitem.getValue();
            ctrl.abrirConsultarCategoria(c);
        }
        else{
            setMensagemAviso("info", "Selecione uma categoria!");
        }
    }

    public void setMensagemAviso(String tipo, String mensagem) {
        boxInformacao.setClass(tipo);
        boxInformacao.setVisible(true);
        msg.setValue(mensagem);
    }

    public void onClick$boxInformacao(Event event) {
        boxInformacao.setVisible(false);
    }
}
